import { IPSModelObject } from '../ipsmodel-object';
import { IPSAppView } from '../app/view/ipsapp-view';
import { IPSNavigateParamContainer } from '../control/ipsnavigate-param-container';
import { IPSLanguageRes } from '../res/ipslanguage-res';
import { IPSSysImage } from '../res/ipssys-image';
import { IPSSysPFPlugin } from '../res/ipssys-pfplugin';

/**
 *
 * 子接口类型识别属性[]
 * @export
 * @interface IPSUIAction
 */
export interface IPSUIAction extends IPSModelObject, IPSNavigateParamContainer {
  /**
   * 行为级别
   * @description 值模式 [界面行为行为级别] {50：不常用、 100：一般操作、 200：常用操作、 250：关键操作 }
   * @type {( number | 50 | 100 | 200 | 250)}
   * @default 100
   */
  actionLevel: number | 50 | 100 | 200 | 250;

  /**
   * 行为操作目标
   * @description 值模式 [云实体界面行为_操作数据范围] {SINGLEDATA：单项数据、 SINGLEKEY：单项数据（主键）、 MULTIDATA：多项数据、 MULTIKEY：多项数据（主键）、 NONE：无数据 }
   * @type {( string | 'SINGLEDATA' | 'SINGLEKEY' | 'MULTIDATA' | 'MULTIKEY' | 'NONE')}
   */
  actionTarget: string | 'SINGLEDATA' | 'SINGLEKEY' | 'MULTIDATA' | 'MULTIKEY' | 'NONE';

  /**
   * 确认信息语言资源
   *
   * @type {IPSLanguageRes}
   */
  getCMPSLanguageRes(): IPSLanguageRes | null;

  /**
   * 确认信息语言资源
   *
   * @type {IPSLanguageRes}
   */
  get cMPSLanguageRes(): IPSLanguageRes | null;

  /**
   * 确认信息语言资源（必须存在）
   *
   * @type {IPSLanguageRes}
   */
  getCMPSLanguageResMust(): IPSLanguageRes;

  /**
   * 标题语言资源
   *
   * @type {IPSLanguageRes}
   */
  getCapPSLanguageRes(): IPSLanguageRes | null;

  /**
   * 标题语言资源
   *
   * @type {IPSLanguageRes}
   */
  get capPSLanguageRes(): IPSLanguageRes | null;

  /**
   * 标题语言资源（必须存在）
   *
   * @type {IPSLanguageRes}
   */
  getCapPSLanguageResMust(): IPSLanguageRes;

  /**
   * 标题
   * @type {string}
   */
  caption: string;

  /**
   * 代码标识
   * @type {string}
   */
  codeName: string;

  /**
   * 操作确认信息
   * @type {string}
   */
  confirmMsg: string;

  /**
   * 数据访问权限
   * @type {string}
   */
  dataAccessAction: string;

  /**
   * 弹窗关闭结果
   * @description 值模式 [界面行为对话框结果] {OK：确定、 CANCEL：取消、 YES：是、 NO：否 }
   * @type {( string | 'OK' | 'CANCEL' | 'YES' | 'NO')}
   */
  dialogResult: string | 'OK' | 'CANCEL' | 'YES' | 'NO';

  /**
   * 前端应用视图
   *
   * @type {IPSAppView}
   */
  getFrontPSAppView(): IPSAppView | null;

  /**
   * 前端应用视图
   *
   * @type {IPSAppView}
   */
  get frontPSAppView(): IPSAppView | null;

  /**
   * 前端应用视图（必须存在）
   *
   * @type {IPSAppView}
   */
  getFrontPSAppViewMust(): IPSAppView;

  /**
   * 前台处理类型
   * @description 值模式 [云实体界面行为_前台处理类型] {WIZARD：打开视图或向导（模态）、 TOP：打开顶级视图、 PRINT：打开打印视图、 DATAIMP：打开数据导入视图、 DATAEXP：打开数据导出视图、 OPENHTMLPAGE：打开HTML页面、 OTHER：用户自定义 }
   * @type {( string | 'WIZARD' | 'TOP' | 'PRINT' | 'DATAIMP' | 'DATAEXP' | 'OPENHTMLPAGE' | 'OTHER')}
   */
  frontProcessType: string | 'WIZARD' | 'TOP' | 'PRINT' | 'DATAIMP' | 'DATAEXP' | 'OPENHTMLPAGE' | 'OTHER';

  /**
   * 完全代码标识
   * @type {string}
   */
  fullCodeName: string;

  /**
   * Html页面路径
   * @type {string}
   */
  htmlPageUrl: string;

  /**
   * 下一步界面行为
   *
   * @type {IPSUIAction}
   */
  getNextPSUIAction(): IPSUIAction | null;

  /**
   * 下一步界面行为
   *
   * @type {IPSUIAction}
   */
  get nextPSUIAction(): IPSUIAction | null;

  /**
   * 下一步界面行为（必须存在）
   *
   * @type {IPSUIAction}
   */
  getNextPSUIActionMust(): IPSUIAction;

  /**
   * 界面行为图标对象
   *
   * @type {IPSSysImage}
   */
  getPSSysImage(): IPSSysImage | null;

  /**
   * 界面行为图标对象
   *
   * @type {IPSSysImage}
   */
  get psSysImage(): IPSSysImage | null;

  /**
   * 界面行为图标对象（必须存在）
   *
   * @type {IPSSysImage}
   */
  getPSSysImageMust(): IPSSysImage;

  /**
   * 前端扩展插件
   *
   * @type {IPSSysPFPlugin}
   */
  getPSSysPFPlugin(): IPSSysPFPlugin | null;

  /**
   * 前端扩展插件
   *
   * @type {IPSSysPFPlugin}
   */
  get psSysPFPlugin(): IPSSysPFPlugin | null;

  /**
   * 前端扩展插件（必须存在）
   *
   * @type {IPSSysPFPlugin}
   */
  getPSSysPFPluginMust(): IPSSysPFPlugin;

  /**
   * 参数项名称
   * @type {string}
   */
  paramItem: string;

  /**
   * 预置行为类型
   * @type {string}
   */
  predefinedType: string;

  /**
   * 刷新引用视图模式
   * @description 值模式 [界面行为重新加载数据模式] {0：无、 1：引用视图或树节点、 2：引用树节点父节点、 3：引用树节点根节点 }
   * @type {( number | 0 | 1 | 2 | 3)}
   * @default 0
   */
  refreshMode: number | 0 | 1 | 2 | 3;

  /**
   * 成功信息语言资源
   *
   * @type {IPSLanguageRes}
   */
  getSMPSLanguageRes(): IPSLanguageRes | null;

  /**
   * 成功信息语言资源
   *
   * @type {IPSLanguageRes}
   */
  get sMPSLanguageRes(): IPSLanguageRes | null;

  /**
   * 成功信息语言资源（必须存在）
   *
   * @type {IPSLanguageRes}
   */
  getSMPSLanguageResMust(): IPSLanguageRes;

  /**
   * 脚本代码
   * @type {string}
   */
  scriptCode: string;

  /**
   * 操作成功提示信息
   * @type {string}
   */
  successMsg: string;

  /**
   * 文本项名称
   * @type {string}
   */
  textItem: string;

  /**
   * 操作超时时长（毫秒）
   * @type {number}
   */
  timeout: number;

  /**
   * 操作提示信息
   * @type {string}
   */
  tooltip: string;

  /**
   * 操作提示语言资源
   *
   * @type {IPSLanguageRes}
   */
  getTooltipPSLanguageRes(): IPSLanguageRes | null;

  /**
   * 操作提示语言资源
   *
   * @type {IPSLanguageRes}
   */
  get tooltipPSLanguageRes(): IPSLanguageRes | null;

  /**
   * 操作提示语言资源（必须存在）
   *
   * @type {IPSLanguageRes}
   */
  getTooltipPSLanguageResMust(): IPSLanguageRes;

  /**
   * 界面行为模式
   * @description 值模式 [云实体界面行为类型] {SYS：系统预定义、 FRONT：前台调用、 BACKEND：后台调用、 WFFRONT：工作流前台调用、 WFBACKEND：工作流后台调用、 CUSTOM：自定义代码 }
   * @type {( string | 'SYS' | 'FRONT' | 'BACKEND' | 'WFFRONT' | 'WFBACKEND' | 'CUSTOM')}
   */
  uIActionMode: string | 'SYS' | 'FRONT' | 'BACKEND' | 'WFFRONT' | 'WFBACKEND' | 'CUSTOM';

  /**
   * 界面行为参数对象
   * @type {IModel}
   */
  uIActionParamJO: IModel;

  /**
   * 界面行为标记
   * @type {string}
   */
  uIActionTag: string;

  /**
   * 界面行为类型
   * @type {string}
   */
  uIActionType: string;

  /**
   * 界面逻辑附加类型
   * @description 值模式 [实体界面行为_视图逻辑附加类型] {REPLACE：替换执行、 AFTER：执行之后 }
   * @type {( string | 'REPLACE' | 'AFTER')}
   */
  uILogicAttachMode: string | 'REPLACE' | 'AFTER';

  /**
   * 界面逻辑类型
   * @type {string}
   */
  uILogicType: string;

  /**
   * 值项名称
   * @type {string}
   */
  valueItem: string;

  /**
   * 操作后关闭编辑视图
   * @type {boolean}
   * @default false
   */
  closeEditView: boolean;

  /**
   * 启用用户操作确认
   * @type {boolean}
   * @default false
   */
  enableConfirm: boolean;

  /**
   * 启用按钮点击切换模式
   * @type {boolean}
   */
  enableToggleMode: boolean;

  /**
   * 行为组
   * @type {boolean}
   * @default false
   */
  group: boolean;

  /**
   * 操作后刷新当前界面
   * @type {boolean}
   * @default false
   */
  reloadData: boolean;

  /**
   * 显示处理提示
   * @type {boolean}
   * @default true
   */
  showBusyIndicator: boolean;
}
